/**
 * @file hs_cuda_utils.cuh
 * @author iam002
 * @brief CUDA 工具函数的定义
 * @version 1.0
 * @date 2024-07-04
 * 
 * @copyright Copyright (c) 2024
 * 
 */
#ifndef __HS_CUDA_UTILS_CUH__
#define __HS_CUDA_UTILS_CUH__

#include <cuda_runtime.h>
#include <device_launch_parameters.h>
#ifdef _MSC_VER 
#include <corecrt_math.h>
#include <corecrt_math_defines.h>
#endif
#include "hs_cuda_pack.cuh"

namespace hs
{

namespace cuda
{

/**
 * @brief 设置核函数的分块大小为 256(线程数)
 *  
 */
constexpr int KERNEL_BLOCK_SIZE = 256;

/**
 * @brief 一个warp中的线程数
 *  每32个线程会组成一个warp，每个warp内的32个线程会执行同一个指令
 */
constexpr int KERNEL_NUM_WAVES = 32;

/**
 * @brief 打印指定GPU设备的信息
 * 
 * @param id 
 */
cudaError_t showGPUInfo(int id);

/**
 * @brief 显示所有 GPU 设备的信息
 * 
 */
cudaError_t showAllGPUInfo();

/**
 * @brief 获取分块个数, 每个分块的线程数为 KERNEL_PACK_MAX_SIZE
 * 
 * @param n 
 * @param num_blocks 
 * @return cudaError_t 
 */
cudaError_t GetNumBlocks(int n, int* num_blocks);

} // end namespace cuda

} // end namespace hs

#endif
